/*
Copyright [2012] [Maria Eugenia Malagamba]
Copyright [2012] [Leandro Pellegrino]
Copyright [2012] [Julia Gambuzzi]
Copyright [2012] [Ignacio Capodanno]

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
*/

#include "Partida.h"

Partida::Partida(int numeroNave)
{
	this->cliente = NULL;
	this->servidor = NULL;
	this->hidratador = NULL;
	this->escenario = "";
	this->numeroNave = numeroNave;
}

Partida::Partida(string escenario)
{
	this->hidratador = new Hidratador(escenario, ".//");
	this->escenario = escenario;
	this->cliente = NULL;
	this->servidor = NULL;
	this->imagenes = this->hidratador->getNombreImagenes();
}

int Partida::prepararPartida(string puerto){

	//ponemos al servidor a escuchar en el puerto
	//TODO:: poner el verdadero puerto
	//Controlar los problemas que puedan surgir
	this->servidor = new Server("1025","127.0.0.1");
	
	this->servidor->crearSocket();
	this->servidor->enlazar();
	this->servidor->escuchar();

	return 0;
}

int Partida::getCantidadDeJugadores(){

	return this->servidor->getCantidadDeConexionesActivas();
}

int Partida::getCantidadMaximaDeJugadores(){

	return this->servidor->getCantidadMaximaConexiones();
}

int Partida::conectarJugador(){

	//esperar que algun jugador se conecte al servidor
	return this->servidor->aceptarConexion();	

}

bool Partida::enviarEscenario(int numCliente){

	//envia el escenario (XML)
	this->servidor->enviarArchivo(this->escenario+".xml",numCliente);

	//envia la cantidad de imagenes del escenario
	this->servidor->enviarEntero(this->imagenes->size(),numCliente);

	for (unsigned int i = 0; i < this->imagenes->size(); i++){
		this->servidor->enviarArchivo(this->imagenes->at(i),numCliente);

	}
	//envia la imagen de la bala
	this->servidor->enviarArchivo("bala.bmp",numCliente);

	//envia la imagen del fuego
	this->servidor->enviarArchivo("fire.bmp",numCliente);

	//recibe el numero de la nave que eligio el cliente
	int numeroNave = this->servidor->recibirEntero(numCliente);

	return 0;

}

int Partida::unirseAPartida(string puerto, string host){

	this->cliente = new Cliente("1025","127.0.0.1");
	cliente->crearSocket();
	cliente->conectar();

	return 0;

}

int Partida::recibirEscenario(){

	////Recibir el XML
	//this->cliente->recibirArchivo();

	////Si es el servidor envia las imagenes del escenario
	//int cantidadImagenes = this->cliente->recibirEntero();

	//for (unsigned int i = 0; i < cantidadImagenes; i++){
	//	this->cliente->recibirArchivo();

	//}
	////La bala 
	//this->cliente->recibirArchivo();
	////El fuego
	//this->cliente->recibirArchivo();
	////envio el numero de la nave
	//this->cliente->enviarEntero(this->numeroNave);

	return 0;

}

void Partida::iniciar(){

}

Partida::~Partida(void)
{
	if( this->servidor != NULL){
		servidor->cerrarConexion();
		delete this->servidor;
	}
}
